/* 
    本文件列举简单的Operators, 很多功能与原生js的方法类似
*/

/* 
    map
    Observable 的map 方法使用上跟阵列的map 是一样的，我们传入一个callback function，这个callback function 
    会带入每次发送出来的元素，然后我们回传新的元素，如下
*/

var source = Rx.Observable.interval(1000);
var newest = source.map(x => x + 2); 

newest.subscribe(console.log);
/* 
    newest.subscribe(console.log) 相信有些小伙伴可能会看不懂此代码，我这里来简单介绍一下
    newest.subscribe()方法可以接受三个参数， 分别对应 next complete error 这三个方法
    而console.log的值应为一个函数即  function log (val) { return 把val并打印在控制台 }
    所以 newest.subscribe(console.log) 就等于这样 newest.subscribe( function log (val) { return 把val并打印在控制台 } )
*/
// 2
// 3
// 4
// 5..

/* 
    mapTo
    mapTo 可以把传进来的值改成一个固定的值，如下
*/
var source2 = Rx.Observable.interval(1000);
var newest2 = source2.mapTo(2); 

newest2.subscribe(console.log);
// 2
// 2
// 2
// 2..

/* 
    filter 在使用上也跟阵列的相同，我们要传入一个callback function，这个function 会传入每个被送出的元素，
    并且回传一个boolean 值，如果为true 的话就会保留，如果为false 就会被滤掉，如下
*/

var source3 = Rx.Observable.interval(1000);
var newest3 = source3.filter(x => x % 2 === 0); 

newest3.subscribe(console.log);
// 0
// 2
// 4
// 6..

/* 
    source: -----0-----1-----2-----3-----4-...
                filter(x => x % 2 === 0)
    newest: -----0-----------2-----------4-...
*/